home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Internet / News / Alexandra.0.82 / Source / Preferences.subproj / FromHeaderController.m < prev    next >
Encoding:
Text File  |  1996-01-30  |  2.2 KB  |  98 lines

  1.  
  2. #import <appkit/appkit.h>
  3. #import <pwd.h>
  4. #import "../Alexandra.h"
  5. #import "FromHeaderController.h"
  6. #import "FromHeaderPanel.h"
  7. #import "askresolverfordomain.h" 
  8.  
  9. @implementation FromHeaderController
  10.  
  11. + new
  12.     {
  13.     static FromHeaderController *me=nil;
  14.     
  15.     if(!me)
  16.         me=[[FromHeaderController alloc] init];
  17.     return me;
  18.     }
  19.  
  20.  
  21. - (char *)computeAddress;
  22.     {
  23.     char  machine_name[256], *domain_name;
  24.     struct passwd *user;
  25.     char  mail_address[512];
  26.     const char *user_name;
  27.      
  28.     user_name=NXUserName();
  29.     user=getpwnam(user_name);
  30.     gethostname(machine_name,sizeof(machine_name));
  31.     domain_name=askresolverfordomain();
  32.      
  33.     if(user_name) strcat(mail_address,user_name);
  34.     strcat(mail_address,"@");
  35.     if(machine_name){
  36.           strcat(mail_address,machine_name);
  37.           strcat(mail_address,".");
  38.      }
  39.     if(domain_name) strcat(mail_address,domain_name);
  40.     if(user){
  41.         strcat(mail_address," (");
  42.         strcat(mail_address,user->pw_gecos);
  43.         strcat(mail_address,")");
  44.     }
  45.     return NXCopyStringBufferFromZone(mail_address,[self zone]);
  46.     }
  47.  
  48.  
  49. - (char *)validFromAddress;
  50.     {
  51.     KVPair        *pair;
  52.     const char    *d;
  53.     char        defname[200], defvalue[200],*fromAddress=NULL;
  54.     int            i,n=[NXApp defaultIntValue:DEFAULT_XHEADER_COUNT],ret;
  55.     BOOL        stopSearching=NO;
  56.  
  57.     for(i=0;i<n && !stopSearching;i++)
  58.         {
  59.         sprintf(defname,DEFAULT_XHEADERS,i+1);
  60.         d=[NXApp defaultValue:defname];
  61.         if(d)
  62.             {
  63.             pair=[[KVPair alloc] init:d delimiter:':'];
  64.             if([pair isNull])
  65.                 stopSearching=YES;
  66.             else if(!strcmp([pair key],"From"))
  67.                 {
  68.                 fromAddress=NXCopyStringBufferFromZone([pair value],[self zone]);
  69.                 stopSearching=YES;
  70.                 }                
  71.             pair=[pair free];
  72.             }
  73.         }
  74.     if(fromAddress)
  75.         return fromAddress;
  76.  
  77.     if(!thePanel)
  78.         [NXApp loadNibSection:"FromHeader.nib" owner:self];
  79.     fromAddress=[self computeAddress];    
  80.      ret=[thePanel runModalForAddress:fromAddress];
  81.     NXZoneFree([self zone],fromAddress);
  82.     if(!ret)
  83.         return NULL;
  84.         
  85.     fromAddress=(char *)[thePanel fromAddress];    
  86.     if(i==n)
  87.         [NXApp setDefault:DEFAULT_XHEADER_COUNT toInt:++i];
  88.     sprintf(defvalue, "From: %s",fromAddress);
  89.     sprintf(defname,DEFAULT_XHEADERS,i);
  90.     [NXApp setDefault:defname to:defvalue];
  91.     EM_ERROR(ENOTEPrefsChanged,self,NULL);
  92.  
  93.     return NXCopyStringBufferFromZone(fromAddress,[self zone]);
  94.     }        
  95.     
  96.  
  97. @end
  98.